#include <string>

using namespace std;

class Student;

//  既然有这个系统，那么不妨把这个系统都给实例化了
class System
{
private:
    Student* pStudent[30];
public:
    System();
    int FileIn();
    void PushPupil();
    void PushMiddle();
    void PushCollege();
    int QueryById();
    int QueryByName();
    void Display();
    void Edit(int);
    void Delete(int);
    void TotalNum();
    void StatGender();
    void StatLevel();
    int Save();
};                                                 //     继承关系：
                                                 //             学生
class Student                          //         /        |
{                                              //   小学生     大学生
protected:                            //        /
    string id;                           //   中学生
    string name;
    char gender;  //   用M代表男，用F代表女
    int age;
    string classes;     //这里不能用class关键字
public:
    virtual ~Student(){};
    void virtual Add() = 0;
    void virtual showInform() = 0;
//    这个Type是在Edit功能出现问题时特别构建的一个纯虚函数，
//    专门用来判断指针指向的是哪个类
    int virtual Type() = 0;
    friend System;
};

class Pupil: public Student
{
protected:
    int english_grade;
    int math_grade;
    int chinese_grade;
public:
    virtual ~Pupil(){};     //  因为是基类，也给它定义了一个虚析构
    void virtual Add();
    void showInform();
    int Type() {return 0;};
    friend System;
};

class Middle_Student: public Pupil
{
protected:
    int geog_grade;
    int history_grade;
    string address;
public:
    void Add();
    void showInform();
    int Type() {return 1;};
    friend System;
};

class College_Student: public Student
{
protected:
    string major;
    string address;
    string tel;     //用电话号码来代表联系方式
public:
    void Add();
    void showInform();
    int Type() {return 2;};
    friend System;
};


